package visual.testes;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.Color;
import javax.swing.JLabel;
import java.awt.Font;
import javax.swing.JComboBox;
import apoio.FuncoesGerais;
import apoio.Tipos;
import apoio.Tipos.Tipo;
import atacado.ServidorAtacado;
import basedados.arquivos_texto.TxtIObj;
import basedados.entidades.Empresas;
import javax.swing.JTextField;
import javax.swing.border.TitledBorder;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.rmi.RemoteException;
import java.util.List;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

/**
 * Formulario apenas para TESTE
 * @author Emerson Shigueo Sugimoto
 * */
public class frmServerTeste extends JFrame {

	private static final long serialVersionUID = 1L;
	private JPanel contentPane;
	private JTextField txtPorta;
	private JTextField txtServico;
	private JTextField txtCaixa;
	private JTextField txtConfiabilidade;
	private JComboBox cboRamo;
	private JComboBox cboIds;
	
	private Empresas _empresa;
	private JButton btnIniciarServidor;
	private JTextArea txtMensagensServidor;
	
	public void setEmpresa(Empresas _empresa) {this._empresa = _empresa; preencheCamposEmpresa();}
	public Empresas getEmpresa() {return _empresa;}
	
	/**
	 * Launch the application.
	 */
//	public static void main(String[] args) {
//		EventQueue.invokeLater(new Runnable() {
//			public void run() {
//				try {
//					frmServerTeste frame = new frmServerTeste();
//					frame.setVisible(true);
//				} catch (Exception e) {
//					e.printStackTrace();
//				}
//			}
//		});
//	}

	private void preencheCamposEmpresa(){
		txtPorta.setText(String.valueOf(getEmpresa().getPorta()));
		txtServico.setText(getEmpresa().getNome());
		txtCaixa.setText("10000");
		txtConfiabilidade.setText("20.0");
	}
	

	/**
	 * Create the frame.
	 */
	public frmServerTeste() {
		setBackground(Color.WHITE);
		setTitle("Server Teste");
		setResizable(false);
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		setBounds(100, 100, 517, 398);
		contentPane = new JPanel();
		contentPane.setBackground(Color.WHITE);
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JLabel lblNewLabel = new JLabel("Selecione o Tipo:");
		lblNewLabel.setFont(new Font("Tahoma", Font.PLAIN, 11));
		lblNewLabel.setBounds(10, 11, 116, 14);
		contentPane.add(lblNewLabel);
		
		JPanel panel = new JPanel();
		panel.setBorder(new TitledBorder(null, "Configura\u00E7\u00F5es", TitledBorder.LEADING, TitledBorder.TOP, null, null));
		panel.setLayout(null);
		panel.setBounds(10, 36, 489, 73);
		contentPane.add(panel);
		
		JLabel label = new JLabel("Porta:");
		label.setFont(new Font("Tahoma", Font.PLAIN, 11));
		label.setBounds(10, 25, 76, 14);
		panel.add(label);
		
		txtPorta = new JTextField();
		txtPorta.setText("3637");
		txtPorta.setFont(new Font("Dialog", Font.PLAIN, 11));
		txtPorta.setColumns(10);
		txtPorta.setBounds(95, 22, 141, 20);
		panel.add(txtPorta);
		
		JLabel label_1 = new JLabel("Servico:");
		label_1.setFont(new Font("Tahoma", Font.PLAIN, 11));
		label_1.setBounds(10, 45, 46, 14);
		panel.add(label_1);
		
		txtServico = new JTextField();
		txtServico.setText("Encomendas");
		txtServico.setColumns(10);
		txtServico.setBounds(95, 45, 141, 20);
		panel.add(txtServico);
		
		JLabel label_2 = new JLabel("Caixa:");
		label_2.setFont(new Font("Tahoma", Font.PLAIN, 11));
		label_2.setBounds(246, 25, 76, 14);
		panel.add(label_2);
		
		txtCaixa = new JTextField();
		txtCaixa.setText("10000");
		txtCaixa.setFont(new Font("Tahoma", Font.PLAIN, 11));
		txtCaixa.setColumns(10);
		txtCaixa.setBounds(331, 22, 141, 20);
		panel.add(txtCaixa);
		
		JLabel label_3 = new JLabel("Confiabilidade:");
		label_3.setFont(new Font("Tahoma", Font.PLAIN, 11));
		label_3.setBounds(246, 45, 92, 14);
		panel.add(label_3);
		
		txtConfiabilidade = new JTextField();
		txtConfiabilidade.setText("20.0");
		txtConfiabilidade.setFont(new Font("Tahoma", Font.PLAIN, 11));
		txtConfiabilidade.setColumns(10);
		txtConfiabilidade.setBounds(331, 45, 141, 20);
		panel.add(txtConfiabilidade);
		
		cboIds = new JComboBox();
		cboIds.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				limparCampos();
				
				if (cboIds!=null && cboIds.getSelectedItem()!=null) {
					preencherCampos(FuncoesGerais.recuperaCodigoCombo(cboIds));
				}
				
			}
		});
		cboIds.setFont(new Font("Tahoma", Font.PLAIN, 11));
		cboIds.setBounds(311, 8, 188, 20);
		contentPane.add(cboIds);
		
		cboRamo = new JComboBox();
		cboRamo.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				preencherIds();
			}
		});
		cboRamo.setBounds(103, 8, 142, 20);
		contentPane.add(cboRamo);
		cboRamo.setFont(new Font("Tahoma", Font.PLAIN, 11));
		Tipos.preencherCbo(cboRamo);
		
		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setBounds(10, 151, 489, 211);
		contentPane.add(scrollPane);
		
		txtMensagensServidor = new JTextArea();
		scrollPane.setViewportView(txtMensagensServidor);		
		
		btnIniciarServidor = new JButton("Iniciar Servidor");
		btnIniciarServidor.setFont(new Font("Tahoma", Font.PLAIN, 11));
		btnIniciarServidor.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				iniciaServer();
			}
		});
		btnIniciarServidor.setBounds(10, 117, 235, 23);
		contentPane.add(btnIniciarServidor);

		JLabel lblIds = new JLabel("Ids:");
		lblIds.setFont(new Font("Tahoma", Font.PLAIN, 11));
		lblIds.setBounds(255, 11, 46, 14);
		contentPane.add(lblIds);
	}
	
	private void preencherIds(){
		limparCampos();
		int selecionado = FuncoesGerais.recuperaCodigoCombo(cboRamo);
		Tipo ramoSel = Tipos.IntTipo(selecionado);
		
		if (cboIds==null) return;
		//Preenche os ids
		cboIds.removeAll();
		cboIds.removeAllItems();
		
		List<Empresas> rBusca = new Empresas().getEmpresasRamo(ramoSel);
		for(Empresas e : rBusca){
			cboIds.addItem(e.getCodigo() + " - " + e.getNome());
		}
		
	}
	
	private void limparCampos(){
		txtPorta.setText("");
		txtServico.setText("Encomendas");
		txtCaixa.setText("10000");
		txtConfiabilidade.setText("20.0");
	}
	
	private void preencherCampos(int codigoEmpresa){
		if (codigoEmpresa <= 0) return;
		Empresas e = new Empresas();
		int selecionado = FuncoesGerais.recuperaCodigoCombo(cboRamo);
		Tipo ramoSel = Tipos.IntTipo(selecionado);
		e.setRamo(ramoSel);
		e = (Empresas) new TxtIObj(e).getIObj(codigoEmpresa);
		
		txtPorta.setText(String.valueOf(e.getPorta()));
	}
	
	public void iniciaServer(){
		if (txtPorta.getText().equals("")) {return;}
		txtPorta.setEnabled(false);
		txtServico.setEnabled(false);
		txtCaixa.setEnabled(false);
		btnIniciarServidor.setEnabled(false);
		cboRamo.setEnabled(false);
		cboIds.setEnabled(false);
		
//		int selecionado = FuncoesGerais.recuperaCodigoCombo(cboRamo);
//		setMeuTipo(Tipos.IntTipo(selecionado));
		
		//servidor
		try {
			new ServidorAtacado(
					Integer.valueOf(txtPorta.getText()), 
					txtServico.getText(), 
					txtMensagensServidor,
					txtConfiabilidade, txtCaixa
					).iniciar();
		} catch (RemoteException e2) {
			e2.printStackTrace();
		}		
	}
	
}
